昨天我們下了訂單,在等硬件送達時,我們可以先預備伺服器端的程式。
首先,我們要知道伺服器分很多種,有串流伺服器(Streaming Server), 遊戲伺服器(Game Server), 列印伺服器(Print Server), 域控制器 (Domain Controller),DHCP 伺服器 (DHCP Server) 和網頁伺服器(HTTP Server)。
無論是哪一種伺服器,總之伺服器就是一台電腦,它上面持續運行著某伺服器程式,使得它在網絡環境中處理和回應其他電腦的請求。為求簡潔,這裡只討論網頁伺服器(HTTP Server)。
以上,我以粗體強調了四個字,希望更具體說明。
伺服器可以大得像大型電腦(Mainframe Computer)這麼大,佔地數百平方呎,通常用以應付巨大資料吞吐量(data throughput)的任務,例如銀行交易和社交媒體。
伺服器也可以小得像一塊ESP32控制器,在學界很多家用物聯網的專案都採用了這技術。當然,這麼小的「電腦」只能應付簡單的運算和很低的資料吞吐量,但用以部署簡單的智能家居儀表板也是綽綽有餘的。
伺服器程式就是部署在伺服器上,廿四小時不停運行的程式。這個程式可以因應不同的請求而發出不同的回應,例如,當我們輸入帳戶和密碼,按下登入時,伺服器程式便會從資料庫中查找用戶是否存在以及看看密碼是否與資料相符,如果相符,便讓我們進入頁面,否則便彈出密碼錯誤的警示。
這個程式可以用不同的程式語言寫成,最常見的是PHP, Java, Node.js, Python,本次零碳運算的伺服器我將會運用Node.js寫成。
這台電腦必須架設在有網絡的環境中,不論是區域網絡(Local Area Network)還是互聯網(Internet),也不論是有線連接還是無線連接。例如銀行的大型電腦,就必須以高速網絡連接到互聯網(當然是用光籤了),以處理來自全球各地的交易請求。以ESP32製作的家用物聯網專案則只需部署在家居的網絡內,而且以WiFi連接就已經足夠了。
作為一個HTTP Server,它的專業就是處理在HTTP協定內指定的請求,最典型的包括「GET」和「POST」。
「GET」的意思是獲得,引伸出來就是從伺服器獲得資料,我們日常在網站閱讀文章,查看圖片都屬於這種。
在node.js+express中,它長成這樣:
//請求 xxxx.yy/hello 的時候,伺服器將回傳'Hello, This is a GET request'
app.get('/hello', function(req, res) {
res.send('Hello, This is a GET request');
});
「POST」的意思是寄送,引伸出來就是向伺服器寄送資料,我們在網站發表文章,填寫表格就屬這種。
//請求 xxxx.yy/postdata 的時候,伺服器可以打開request body查看裡頭由客戶端傳來的資料
app.post('/postdata', function(req, res) {
res.send('Received a POST request with data: ' + JSON.stringify(req.body));
});
今天暫時說到這裡。